
/// 班次模块
/// 

use poem_openapi::{payload::Json, Tags, ApiResponse, Object};

#[derive(Tags)]
pub enum ApiTags {
    /// 获取打卡信息接口的入参格式
    ShiftInfoRequest,
}

/// 创建打卡入参模式
#[derive(Debug, Object, Clone, Eq, PartialEq)]
pub struct ShiftInfoRequest {

    /// 用户编号
    #[oai(max_length = 64)]
    pub shift_id: Option<String>,

    /// 考勤时间
    #[oai(max_length = 64)]
    pub shift_name: Option<String>,  

}

/// 班次信息详情
#[derive(Debug, Object, Clone, PartialEq)]
pub struct ShiftInfo {
    /// 班次id
    #[oai(max_length = 64)]
    pub shift_id: String,

    /// 班次名称
    #[oai(max_length = 64)]
    pub shift_name: String,

    /// 上下班次数
    #[oai(maximum(value = "3"))]
    pub shift_onoff_count: u8,

    /// 上下班次数 1: 固定时间考勤 2：弹性时间考勤
    #[oai(maximum(value = "2"))]
    pub attendance_mean: u8,

    /// 上班时间
    #[oai(max_length = 64)]
    pub shift_on_time: String,

    /// 下班时间
    #[oai(max_length = 64)]
    pub shift_off_time: String,

    // 班次时长 分钟
    #[oai(maximum(value = "1440"))]
    pub shift_time: u32,

    // 晚到多少分钟即为迟到
    #[oai(maximum(value = "1440"))]
    pub late_on_minutes_as_late: u32,

    // 晚到多少分钟记为半天缺卡
    #[oai(maximum(value = "1440"))]
    pub late_on_minutes_as_lack: u32,

    // 最早可提前多久打上班卡
    #[oai(maximum(value = "1440"))]
    pub early_minutes_on_clock: u32,

    // 最早超过多少分钟即为早退
    #[oai(maximum(value = "1440"))]
    pub early_off_minutes_as_early: u32,

    // 最早超过多少分钟即为半天缺卡
    #[oai(maximum(value = "1440"))]
    pub early_off_minutes_as_lack: u32,

    // 最晚可延后多久还可以打下班卡
    #[oai(maximum(value = "1440"))]
    pub late_minutes_off_clock: u32,    

    // 弹性班次配置信息
    #[oai()]
    pub flexible_shift_conf: Option<FlexibleShiftConf>,

}

// ## 弹性时间考勤
#[derive(Debug, Object, Clone, PartialEq)]
pub struct FlexibleShiftConf {

    // 上班最多可晚到多少分钟
    #[oai(maximum(value = "1440"))]
    pub on_late_minutes_as_normal: u32,

    // 下班最多可早走多少分钟
    #[oai(maximum(value = "1440"))]
    pub off_early_minutes_as_normal: u32,

}



#[derive(ApiResponse)]
pub enum ShiftInfoResponse {

    #[oai(status = 200)]
    Ok(Json<ShiftInfo>),

    #[oai(status = 400)]
    NotFound
}